package commerce.business;

import java.util.List;

import org.apache.log4j.Logger;

import commerce.hibernate.dao.CommerceDAO;
import commerce.hibernate.po.*;

/*
 * 电子商务管理
 * 包含大部分由店铺管理员实施的功能
 */
public class CommerceManage {
	public Logger logger = Logger.getLogger(this.getClass());
	CommerceDAO dao=new CommerceDAO();
	CommerceBusiness bus=new CommerceBusiness();
	Integer shopId;//当前管理的门店id
	/*
	 *构造函数
	 *必须要输入门店id进行初始化，因为，该对象的所有操作均与门店有关
	 */
	public CommerceManage(Integer shopId)
	{
		this.shopId=shopId;
	}
	/////////////////////////////////////////////////////
	/*
	 * 产品分类管理
	 */
	////////////////////////////////////////////////////
	
	/*
	 * 保存产品分类
	 * 该功能仅由店铺自己实施
	 * @param category 待保存的产品分类信息
	 * @shopId  当前正在操作的门店id
	 */
	public boolean saveCategory(ProductCategory category)
	{		
		if(category==null)
		{
			logger.error("create category failed!");
			return false;
		}
		if(category.getCategoryName()==null||category.getCategoryName().equals(""))
		{
			logger.error("category name can not be blank!");
			return false;
		}	
		//待保存的门店必须是shopid对应的门店，即门店只能管理自己的产品分类
		if(!category.getShopId().equals(shopId))
		{
			logger.error("the category is not belong to shop "+shopId);
			return false;
		}
		return dao.saveOrupdate(category);
	}
	
	/*
	 * 删除产品分类
	 * 该功能仅由店铺自己实施
	 * @param category 产品分类对象
	 */
	public boolean deleteCategory(ProductCategory category)
	{
		if(category==null)
			return true;
		if(!category.getShopId().equals(shopId))
		{
			logger.error("the category is not belong to shop "+shopId);
			return false;
		}
		return dao.delete(category);
	}
	
	/*
	 * 获取产品分类
	 * 该功能仅由店铺自己实施
	 * @param id  产品分类id
	 */
	public ProductCategory getCategoryById(Integer id)
	{		
		ProductCategory category=null;
		List result=null;
		//仅查询当前门店内的产品分类
		String strhql="from ProductCategory as p where p.id="+id+" and p.shopId="+shopId;
		result=dao.find(strhql);
		if(result!=null&&result.size()>0)
			category=(ProductCategory)result.get(0);
		return category;
	}
	/*
	 * 删除产品分类
	 * 该功能仅由店铺自己实施
	 * @param id  产品分类id
	 */
	public boolean deleteCategoryById(Integer id)
	{
		ProductCategory category=null;
		List result=null;
		//仅删除属于当前门店内的产品分类
		String strhql="delete ProductCategory as p where p.id="+id+" and p.shopId="+shopId;		
		return dao.excuteHql(strhql);
	}
	/*
	 * 批量删除产品分类
	 * 该功能仅由店铺自己实施
	 * @param idArray  待删除产品分类id数组
	 */
	public boolean deleteCategoryBatch(Integer[] idArray)
	{
		if(idArray==null||idArray.length==0)
			return true;
		String strhql="delete ProductCategory as p where p.shopId="+shopId+" and p.id in (";
		
		
		for (int i = 0; i < idArray.length; i++) {
			
			if (i > 0)
				
				strhql += ", " + idArray[i];
			
			else
				
				strhql = "" + idArray[i];
			
		}
		strhql=strhql+")";		
		return dao.excuteHql(strhql);
	}
	/////////////////////////////////////////////////////
	/*
	 * 店铺管理
	 */
	////////////////////////////////////////////////////
	/*
	 * 保存店铺
	 * @param shop 待保存的店铺对象
	 * 
	 */	
	
	public boolean saveShop(Shop shop)
	{		
		if(shop==null)
		{
			logger.error("save shop failed");
			return false;
		}
		if(shop.getShopName()==null||shop.getShopName().equals(""))
		{
			logger.error("save failed!shop name can not be blank");
			return false;
		}
		if(!shop.getId().equals(shopId))
		{
			logger.error("save failed!the shop is not belong to shop "+shopId);
			return false;
		}
		return dao.saveOrupdate(shop);
	}
	
	/////////////////////////////////////////////////////
	/*
	 * 产品管理
	 */
	////////////////////////////////////////////////////
	/*
	 * 保存产品
	 * @param product 待保存的产品对象
	 * @return 保存成功返回true，否则返回false
	 */	
	
	public boolean saveProduct(Product product)
	{		
		if(product==null)
		{
			logger.error("save product failed");
			return false;
		}
		if(product.getProductName()==null||product.getProductName().equals(""))
		{
			logger.error("save failed!product name can not be blank");
			return false;
		}		
		return dao.saveOrupdate(product);
	}
	
	/*
	 * 删除产品
	 * @param product 产品对象
	 */
	public boolean deleteProduct(Product product)
	{
		if(product==null)
			return true;		
		return dao.delete(product);
	}
	/*
	 * 删除产品
	 * @param id  产品id
	 */
	public boolean deleteProductById(Integer id)
	{
		//仅删除属于当前门店内的产品
		String strhql="delete Product as p where p.id="+id+" and p.shopId="+shopId;		
		return dao.excuteHql(strhql);
	}
	/*
	 * 批量删除产品
	 * @param idArray  待删除产品id数组
	 */
	public boolean deleteProductBatch(Integer[] idArray)
	{
		if(idArray==null||idArray.length==0)
			return true;
		String strhql="delete Product as p where p.shopId="+shopId+" and p.id in (";
		
		
		for (int i = 0; i < idArray.length; i++) {
			
			if (i > 0)
				
				strhql += ", " + idArray[i];
			
			else
				
				strhql = "" + idArray[i];
			
		}
		strhql=strhql+")";
		return dao.excuteHql(strhql);
	}
	/////////////////////////////////////////////////////
	/*
	 * 报价管理
	 */
	////////////////////////////////////////////////////
	public boolean MakePrice(TodayPrice todayPrice)
	{
		if(todayPrice==null)
		{
			logger.error("save todayprice failed!");
			return false;
		}
		if(todayPrice.getShopId()==null||(!todayPrice.getShopId().equals(shopId)))
		{
			logger.error("save todayprice failed!the price is not belong to shop "+shopId);
			return false;
		}
		return dao.saveOrupdate(todayPrice);
	}
}
